

package Jogo;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.Timer;

public class Missao extends JPanel implements ActionListener{
    
    private Image fundo;
    private Nave nave;
    private Timer timer;
    private boolean inGame;
    private List<Inimigo> inimigos;
    
    public Missao(){
        
        setDoubleBuffered(true);
        setFocusable(true);
        addKeyListener(new TecladoAdapter());
        ImageIcon fundo_ref = new ImageIcon("resource\\space.png");
        fundo = fundo_ref.getImage();
        
        nave = new Nave();
        inGame = true;
        inicia_inimigos();
        timer = new Timer(8, this);
        timer.start();
    }
    
    public void inicia_inimigos(){
        inimigos = new ArrayList<Inimigo>();
        
        for(int i=1; i<13; i++){
            for(int j=1; j<4; j++){  
                inimigos.add(new Inimigo(nave.getNave_largura()*i, nave.getNave_altura()*j)); 
            }    
        }
    }
    
    public void paint(Graphics g){
        
        Graphics2D graficos = (Graphics2D) g;
        graficos.drawImage(fundo, 0, 0, this);
                                
        if(inGame){
            graficos.drawImage(nave.getImagem_nave(), nave.getX(), nave.getY(), this);
            
            graficos.drawString("Inimigos: ", 25, 25);
            graficos.drawString(Long.toString(inimigos.size()), 80, 25);
            
            List<Tiro> tiros = nave.getTiros();
            
            for(int i=0; i<tiros.size(); i++){
                Tiro t = (Tiro) tiros.get(i);
                graficos.drawImage(t.getImagem_tiro(), t.getX(), t.getY(), this);
            }

            for(int i=0; i<inimigos.size(); i++){
                Inimigo ini = inimigos.get(i);
                graficos.drawImage(ini.getImagem_inimigo(), ini.getX(), ini.getY(), this);
            }
            
        }
        
        else if(inimigos.size() == 0) {
                ImageIcon gameover = new ImageIcon("resource\\win.png"); //colocar alguma imagem de winner
                graficos.drawImage(gameover.getImage(), 0, 0, null);
                
                //graficos.drawString(" ", 100, 300);
                //g.drawString("Pontuação: ", 25, 25);
                
                graficos.drawString(Long.toString(inimigos.size()), 25, 25);
                
                
        }
        else{
            ImageIcon gameover = new ImageIcon("resource\\gameover.png");
            graficos.drawImage(gameover.getImage(), 0, 0, null);
        }
        g.dispose();
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        
        if(inimigos.size()==0){
            inGame = false;
        }
        List<Tiro> tiros = nave.getTiros();
        for(int i=0; i < tiros.size(); i++){
            Tiro t = (Tiro) tiros.get(i);
            
            if(t.isVisivel()){
                t.move_tiro();
            }
            else{
                tiros.remove(i);
            }
        }
        for(int i=0; i < inimigos.size(); i++){
            Inimigo ini = (Inimigo) inimigos.get(i);
            
            if(ini.isVisivel()){
                ini.move_inimigo();
            }
           // else{
             //  inimigos.remove(i);
          //  }
        }
        
        nave.move_nave();
        verifica_colisao();
        repaint();
    }
    
    public void verifica_colisao(){
        Rectangle boundsNave = nave.getBounds();
        Rectangle boundsInimigo;
        Rectangle boundsTiro;
            
        List<Tiro> tiros = nave.getTiros();
        for(int i=0; i<tiros.size(); i++){
            Tiro tiro_temporario = tiros.get(i);
            boundsTiro = tiro_temporario.getBounds();
            
            for(int j=0; j<inimigos.size(); j++){
                Inimigo inimigo_temporario = inimigos.get(j);
                boundsInimigo = inimigo_temporario.getBounds();
                
                if(boundsTiro.intersects(boundsInimigo)){
                    inimigos.remove(j);
                    
                    tiro_temporario.setVisivel(false);
                }
            }
        }
    }
    
    private class TecladoAdapter extends KeyAdapter{

        @Override
        public void keyPressed(KeyEvent ke) {
            nave.keyPressed(ke); 
        }
        
        @Override
        public void keyReleased(KeyEvent ke) {
            nave.keyReleased(ke); 
        }
        
    }
}
